/**
 * 任务包资源导入进度监控
 * 提供实时进度查询和状态展示功能
 */
$(function() {
    // 全局变量
    let progressTimer = null;
    let taskPackageId = null;
    
    /**
     * 初始化进度监控
     * @param {Number} packageId 任务包ID
     * @param {Object} options 配置选项
     */
    window.initImportProgress = function(packageId, options = {}) {
        // 默认配置
        const defaultOptions = {
            pollInterval: 2000,         // 轮询间隔(毫秒)
            progressBarSelector: '#importProgressBar',  // 进度条选择器
            statusTextSelector: '#importStatusText',    // 状态文本选择器
            detailTextSelector: '#importDetailText',    // 详情文本选择器
            onComplete: null,            // 完成回调
            onError: null,               // 错误回调
            autoStart: true              // 是否自动开始监控
        };
        
        // 合并配置
        const settings = $.extend({}, defaultOptions, options);
        
        // 保存任务包ID
        taskPackageId = packageId;
        
        // 清除可能存在的计时器
        if (progressTimer) {
            clearInterval(progressTimer);
            progressTimer = null;
        }
        
        // 初始化UI
        $(settings.progressBarSelector).css('width', '0%').attr('aria-valuenow', 0);
        $(settings.statusTextSelector).text('正在准备导入...');
        $(settings.detailTextSelector).text('');
        
        // 如果设置为自动开始，则启动监控
        if (settings.autoStart) {
            startProgressMonitoring(settings);
        }
        
        // 返回控制接口
        return {
            start: function() {
                startProgressMonitoring(settings);
            },
            stop: function() {
                stopProgressMonitoring();
            },
            check: function() {
                checkImportProgress(settings);
            }
        };
    };
    
    /**
     * 开始进度监控
     * @param {Object} settings 配置选项
     */
    function startProgressMonitoring(settings) {
        // 先执行一次检查
        checkImportProgress(settings);
        
        // 设置定时器定期检查
        progressTimer = setInterval(function() {
            checkImportProgress(settings);
        }, settings.pollInterval);
    }
    
    /**
     * 停止进度监控
     */
    function stopProgressMonitoring() {
        if (progressTimer) {
            clearInterval(progressTimer);
            progressTimer = null;
        }
    }
    
    /**
     * 检查导入进度
     * @param {Object} settings 配置选项
     */
    function checkImportProgress(settings) {
        if (!taskPackageId) {
            console.error('任务包ID未设置');
            return;
        }
        
        $.ajax({
            url: '/tasking/importStats/' + taskPackageId,
            type: 'GET',
            dataType: 'json',
            success: function(response) {
                if (response.code === 200) {
                    updateProgressUI(response.data, settings);
                    
                    // 如果导入完成或出错，停止监控
                    if (response.data.status === 'completed' || 
                        response.data.status === 'error' || 
                        response.data.status === 'partial_error') {
                        stopProgressMonitoring();
                        
                        // 调用相应的回调
                        if (response.data.status === 'completed' && typeof settings.onComplete === 'function') {
                            settings.onComplete(response.data);
                        } else if ((response.data.status === 'error' || response.data.status === 'partial_error') && 
                                  typeof settings.onError === 'function') {
                            settings.onError(response.data);
                        }
                    }
                } else {
                    console.error('获取进度信息失败:', response.message);
                    $(settings.statusTextSelector).text('获取进度信息失败');
                    $(settings.detailTextSelector).text(response.message || '未知错误');
                }
            },
            error: function(xhr, textStatus, errorThrown) {
                console.error('进度查询请求失败:', textStatus, errorThrown);
                $(settings.statusTextSelector).text('进度查询请求失败');
                $(settings.detailTextSelector).text(textStatus + ': ' + errorThrown);
            }
        });
    }
    
    /**
     * 更新进度UI
     * @param {Object} data 进度数据
     * @param {Object} settings 配置选项
     */
    function updateProgressUI(data, settings) {
        // 更新进度条
        let progressPercent = 0;
        if (data.status === 'uploading') {
            // 上传阶段固定显示10%
            progressPercent = 10;
        } else if (data.status === 'importing') {
            // 导入阶段根据实际进度显示10%-100%
            progressPercent = 10 + (data.progress || 0) * 0.9;
        } else if (data.status === 'completed') {
            // 完成状态显示100%
            progressPercent = 100;
        } else if (data.status === 'partial_error') {
            // 部分错误状态根据实际进度展示
            progressPercent = 10 + (data.progress || 0) * 0.9;
        }
        
        // 限制在0-100范围内
        progressPercent = Math.max(0, Math.min(100, progressPercent));
        
        // 更新进度条
        $(settings.progressBarSelector)
            .css('width', progressPercent + '%')
            .attr('aria-valuenow', progressPercent);
        
        // 根据状态更新颜色
        if (data.status === 'error') {
            $(settings.progressBarSelector).removeClass('bg-primary bg-success').addClass('bg-danger');
        } else if (data.status === 'partial_error') {
            $(settings.progressBarSelector).removeClass('bg-primary bg-danger').addClass('bg-warning');
        } else if (data.status === 'completed') {
            $(settings.progressBarSelector).removeClass('bg-primary bg-danger').addClass('bg-success');
        } else {
            $(settings.progressBarSelector).removeClass('bg-success bg-danger').addClass('bg-primary');
        }
        
        // 更新状态和详情文本
        $(settings.statusTextSelector).text(data.statusDesc || getDefaultStatusText(data.status));
        $(settings.detailTextSelector).text(data.progressDesc || '');
    }
    
    /**
     * 获取默认状态文本
     * @param {String} status 状态码
     * @returns {String} 状态描述
     */
    function getDefaultStatusText(status) {
        switch (status) {
            case 'uploading': return '正在上传文件...';
            case 'importing': return '正在导入资源...';
            case 'completed': return '导入完成';
            case 'error': return '导入出错';
            case 'partial_error': return '部分导入成功';
            case 'not_found': return '未找到导入任务';
            default: return '未知状态';
        }
    }
}); 